% TP 3, EJ 2

ingreso( roque, enero, 2000 ).
ingreso( roque, febrero, 3500 ).
ingreso( roque, marzo, 1200 ).
ingreso( luisa, enero, 2500 ).
ingreso( luisa, febrero, 850 ).

padre( roque, luisa ).

% (A)
persona( P ) :- padre( P, _ ).
persona( P ) :- padre( _, P ).

buenPasar( Pers ) :- ingreso( Pers, enero, Ing ), Ing > 2200, !.
buenPasar( Pers ) :- cantMayoresA( Pers, 3000, 1 ), !.
buenPasar( Pers ) :- cantMayoresA( Pers, 2500, 2 ), !.

cantMayoresA( Pers, Num, Min ) :-
	persona( Pers ),
	findall( Ing, (ingreso(Pers,_,Ing), Ing > Num), Ings ),
	length( Ings, Cant ),
	Cant >= Min.

/*
	buenPasar( luisa ). --> Yes
	buenPasar( roque ). --> No
*/

% (B)
% Quiero que los meses que no se especifica, sea 0.
% ingreso( _, _, 0 ).

mesFilial( Padre, Mes ) :- 
	padre( Hijo, Padre ),
	ingreso( Padre, Mes, Sp ),
	ingreso( Hijo, Mes, Sh ),
	% write( Sh ), write( '-' ), write( Sp ), nl,
	Sh > Sp.
	
% (C)
ingresoTotal( Pers, Tot ) :- 
	persona(Pers),
	findall( I, ingreso(Pers,_,I), Is ),
	sumlist( Is, Tot ).

/*
	ingresoTotal( Persona, Total ). --> Persona = roque, Total = 6700; Persona = luisa, Total = 3350
*/

% (D)
% No soporta mas de un hijo :(
ingresoHijos( Pers, Ing ) :- padre(Hijo,Pers), ingresoTotal(Hijo,Ing), !.
	
ingresoHijos( _, 0 ).

ingresoFamiliar( Pers, Ing ) :-
	ingresoTotal( Pers, Temp ),
	ingresoHijos( Pers, Temp2 ),
	Ing is Temp + Temp2.

/*
	ingresoFamiliar( Persona, Total ). --> Persona = roque, Total = 6700; Persona = luisa, Total = 10050
*/